//package com.jiegui.mqtt.config;
//
//import com.jiegui.mqtt.callback.MqttProviderCallBack;
//import lombok.extern.slf4j.Slf4j;
//
//import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
//import org.eclipse.paho.client.mqttv3.MqttAsyncClient;
//import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
//import org.eclipse.paho.client.mqttv3.MqttException;
//import org.eclipse.paho.client.mqttv3.MqttMessage;
//import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Configuration;
//
//import javax.annotation.PostConstruct;
//
//@Configuration
//@Slf4j
//public class MqttConfig {
//
//	@Value("${mqtt.host:}")
//	private String host;
//
//	@Value("${mqtt.user:}")
//	private String user;
//
//	@Value("${mqtt.password:}")
//	private String pwd;
//
//	@Autowired
//	private MqttProviderCallBack mqttProviderCallBack;
//
//	// 接收消息主题
//	// public static String TOPIC = "/charge/term/869298050797737";
//	//public static final String TOPIC = "/locker/term/#";
//	// 上下线通知
//	public static final String ONLINE_TOPIC = "$SYS/brokers/+/clients/#";
//
//	/**
//	 * 客户端对象
//	 */
//	private MqttAsyncClient client;
//
//	@PostConstruct
//	public void init() {
//		connect();
//	}
//
//	/**
//	 * 客户端连接服务端
//	 */
//	public void connect() {
//		try {
//
//			// 创建MQTT客户端对象
//			client = new MqttAsyncClient(host, MqttAsyncClient.generateClientId(), new MemoryPersistence());
//			// 连接设置
//			MqttConnectOptions options = new MqttConnectOptions();
//			// 是否清空session，设置false表示服务器会保留客户端的连接记录（订阅主题，qos）,客户端重连之后能获取到服务器在客户端断开连接期间推送的消息
//			// 设置为true表示每次连接服务器都是以新的身份
//			options.setCleanSession(true);
//			// 设置连接用户名
//			options.setUserName(user);
//			// 设置连接密码
//			options.setPassword(pwd.toCharArray());
//			// 设置消息限流
//			options.setMaxInflight(1000);
//			// 设置超时时间，单位为秒
//			options.setConnectionTimeout(10);
//			options.setAutomaticReconnect(true);
//			// 设置心跳时间 单位为秒，表示服务器每隔 1.5*20秒的时间向客户端发送心跳判断客户端是否在线
//			options.setKeepAliveInterval(20);
//			options.setMaxReconnectDelay(1000 * 10);
//			// 设置遗嘱消息的话题，若客户端和服务器之间的连接意外断开，服务器将发布客户端的遗嘱信息
////            options.setWill("willTopic",(clientId + "与服务器断开连接").getBytes(),0,false);
//			// 设置回调
//			client.setCallback(mqttProviderCallBack);
//			client.connect(options);
//		} catch (MqttException e) {
//			log.error("mqtt连接异常:{}", e);
//		}
//	}
//
//	public void subscribe(String[] topicFilters, int[] qos) {
//		try {
//			client.subscribe(topicFilters, qos);
//		} catch (MqttException e) {
//			log.error("订阅消息异常");
//		} // 订阅主题
//	}
//
//	public IMqttDeliveryToken publish(String TOPIC, MqttMessage mqttMessage) throws MqttException {
//		return client.publish(TOPIC, mqttMessage);
//	}
//}
